package baiqitun.netfiles.service.impl;

import baiqitun.netfiles.cache.Cache;
import baiqitun.netfiles.cache.impl.MapCache;
import baiqitun.netfiles.entity.BaseEntity;
import baiqitun.netfiles.service.EntityService;
import cn.hutool.core.util.IdUtil;

/**
 * 持久层抽象
 * @author kedaji
 * @param <T>
 */
public abstract class EntityServiceImpl<T extends BaseEntity> implements EntityService<T> {
    private Cache cache = new MapCache();

    public Object getObject(String key){
        return cache.get(key);
    }

    @SuppressWarnings("unchecked")
    public T get(String key){
        return (T) getObject(formatKey(key));
    }

    /**
     * 保存
     * @param entity 实体类
     */
    @Override
    public void save(T entity) {
        if (entity.getId() == null){
            entity.setId(IdUtil.fastSimpleUUID());
        }
        saveObject(formatKey(entity.getId()), entity);
    }

    /**
     * 保存
     * @param key 键
     * @param value 值
     */
    @Override
    public void saveObject(String key, Object value) {
        cache.set(key, value);
    }


    /**
     * 对key进行格式化
     * @param key 键
     * @return 生成的键
     */
    public String formatKey(String key){
        return this.getClass().getName()+"#"+key;
    }
}
